home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / s_to_z / tsmtp11 / mmail.pas < prev    next >
Pascal/Delphi Source File  |  1996-09-15  |  6KB  |  236 lines

  1. unit Mmail;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, Buttons, ExtCtrls, StdCtrls, Smtp,
  8.   SMTPSu,IniFiles;
  9.  
  10. type
  11.   TMailForm = class(TForm)
  12.     ToolBar: TPanel;
  13.     SendButton: TSpeedButton;
  14.     SetupButton: TSpeedButton;
  15.     ExitButton: TSpeedButton;
  16.     SendInfoPanel: TPanel;
  17.     ToEdit: TEdit;
  18.     Label1: TLabel;
  19.     Label3: TLabel;
  20.     SubjectEdit: TEdit;
  21.     CancelButton: TSpeedButton;
  22.     Label2: TLabel;
  23.     BodyMemo: TMemo;
  24.     StatusBar: TPanel;
  25.     AttachButton: TSpeedButton;
  26.     AttachmentsComboBox: TComboBox;
  27.     procedure ExitButtonClick(Sender: TObject);
  28.     procedure SendButtonClick(Sender: TObject);
  29.     procedure CancelButtonClick(Sender: TObject);
  30.     procedure SetupButtonClick(Sender: TObject);
  31.     procedure FormCreate(Sender: TObject);
  32.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  33.     procedure AttachButtonClick(Sender: TObject);
  34.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  35.   private
  36.     { Private declarations }
  37.     IniName : string;
  38.     Mailer : TSMTP;
  39.     procedure EnableControls;
  40.     procedure DisableControls;
  41.     procedure MailerStatusChange(Sender : TObject);
  42.   public
  43.     { Public declarations }
  44.   end;
  45.  
  46. var
  47.   MailForm: TMailForm;
  48.  
  49. implementation
  50.  
  51. {$R *.DFM}
  52.  
  53. procedure TMailForm.EnableControls;
  54. var
  55.   i : Integer;
  56.   SB : TSpeedButton;
  57. begin
  58.   for i:=0 to ToolBar.ControlCount-1 do
  59.   begin
  60.     SB:=ToolBar.Controls[i] as TSpeedButton;
  61.     SB.Enabled:=SB.Tag<>1;
  62.   end;
  63.   SendInfoPanel.Enabled:=true;
  64.   BodyMemo.Enabled:=true;
  65.   Cursor:=crDefault;
  66. end;
  67.  
  68. procedure TMailForm.DisableControls;
  69. var
  70.   i : Integer;
  71.   SB : TSpeedButton;
  72. begin
  73.   for i:=0 to ToolBar.ControlCount-1 do
  74.   begin
  75.     SB:=ToolBar.Controls[i] as TSpeedButton;
  76.     SB.Enabled:=SB.Tag=1;
  77.   end;
  78.   SendInfoPanel.Enabled:=false;
  79.   BodyMemo.Enabled:=false;
  80.   Cursor:=crHourGlass;
  81. end;
  82.  
  83. procedure TMailForm.ExitButtonClick(Sender: TObject);
  84. begin
  85.   Close;
  86. end;
  87.  
  88. procedure TMailForm.SendButtonClick(Sender: TObject);
  89. begin
  90.   if (Mailer.Server='') or (Mailer.From='') then
  91.     MessageDlg('You might want to enter the information'^M^J+
  92.                'in the Setup dialog box...',mtError,[mbOk],0)
  93.   else
  94.   if ToEdit.Text='' then
  95.     MessageDlg('You might want to enter the recipient''s address first...'
  96.                ,mtError,[mbOk],0)
  97.   else
  98.   with Mailer do
  99.   begin
  100.     Recipient:=ToEdit.Text;
  101.     Subject:=SubjectEdit.Text;
  102.     Body:=BodyMemo.Lines;
  103.     Attachments:=AttachmentsComboBox.Items;
  104.     try
  105.       DisableControls;
  106.       Connect;
  107.       Send;
  108.     finally
  109.       Disconnect;
  110.       EnableControls;
  111.     end;
  112.   end;
  113. end;
  114.  
  115. procedure TMailForm.CancelButtonClick(Sender: TObject);
  116. begin
  117.   Mailer.Cancel;
  118. end;
  119.  
  120. procedure TMailForm.SetupButtonClick(Sender: TObject);
  121. var
  122.   A,N : string;
  123. begin
  124.   with TSetupDlg.Create(Self) do
  125.   try
  126.     ServerEdit.Text:=Mailer.Server;
  127.     Mailer.BreakLine(Mailer.From,A,N);
  128.     UserAddressEdit.Text:=A;
  129.     UserNameEdit.Text:=N;
  130.     LogFileNameEdit.Text:=Mailer.LogFileName;
  131.     EncodeComboBox.ItemIndex:=Ord(Mailer.Encoding);
  132.     ShowModal;
  133.     if ModalResult=mrOk then
  134.     begin
  135.       Mailer.Server:=ServerEdit.Text;
  136.       Mailer.From:=UserAddressEdit.Text;
  137.       Mailer.From:=Mailer.JoinLines(UserAddressEdit.Text,
  138.                    UserNameEdit.Text);
  139.       Mailer.LogFileName:=LogFileNameEdit.Text;
  140.       Mailer.Encoding:=TEncoding(EncodeComboBox.ItemIndex);
  141.     end;
  142.   finally
  143.     free;
  144.   end;
  145. end;
  146.  
  147. procedure TMailForm.MailerStatusChange(Sender : TObject);
  148. var
  149.   s : string;
  150. begin
  151.   case Mailer.Status of
  152.    msIdle : s:='';
  153.    msResolving : s:='Resolving remote host';
  154.    msConnecting : s:='Connecting to server';
  155.    msHeaders : s:='Sending headers';
  156.    msEnvelope : s:='Sending commands';
  157.    msBody : s:='Sending message body';
  158.    msAttachment : s:='Sending attachment(s)';
  159.    msDisconnecting : s:='Disconnecting';
  160.    msError : s:='Error';
  161.    msCancel : s:='Canceled';
  162.    msEnCode : s:='Encoding the attachment(s)';
  163.   end;
  164.   StatusBar.Caption:=s;
  165. end;
  166.  
  167. procedure TMailForm.FormCreate(Sender: TObject);
  168. var
  169.   A,N : string;
  170. begin
  171.   Mailer:=TSMTP.Create(Self);
  172.   Mailer.OnStatusChange:=MailerStatusChange;
  173.   IniName:=ChangeFileExt(Application.ExeName,'.ini');
  174.   with TIniFile.Create(IniName) do
  175.   try
  176.     Mailer.Server:=ReadString('Setup','Server','');
  177.     A:=ReadString('Setup','EMail Address','');
  178.     N:=ReadString('Setup','Name','');
  179.     Mailer.From:=Mailer.JoinLines(A,N);
  180.     Mailer.LogFileName:=ReadString('Setup','Log File','');
  181.     Mailer.Encoding:=TEncoding(ReadInteger('Setup','Encoding',0));
  182.   finally
  183.     free;
  184.   end;
  185. end;
  186.  
  187. procedure TMailForm.FormClose(Sender: TObject; var Action: TCloseAction);
  188. var
  189.   A,N : string;
  190. begin
  191.   with TIniFile.Create(IniName) do
  192.   try
  193.     WriteString('Setup','Server',Mailer.Server);
  194.     Mailer.BreakLine(Mailer.From,A,N);
  195.     WriteString('Setup','EMail Address',A);
  196.     WriteString('Setup','Name',N);
  197.     WriteString('Setup','Log File',Mailer.LogFileName);
  198.     WriteInteger('Setup','Encoding',Ord(Mailer.Encoding));
  199.   finally
  200.     free;
  201.     Mailer.Free;
  202.   end;
  203. end;
  204.  
  205. procedure TMailForm.AttachButtonClick(Sender: TObject);
  206. begin
  207.   with TOpenDialog.Create(Self) do
  208.   try
  209.     Filter:='All Files (*.*)|*.*';
  210.     Options:=[ofHideReadOnly,ofAllowMultiSelect];
  211.     if Execute then
  212.     begin
  213.       AttachmentsComboBox.Items.Assign(Files);
  214.       AttachmentsComboBox.ItemIndex:=0;
  215.     end
  216.     else
  217.       AttachmentsComboBox.Items.Clear;
  218.   finally
  219.     Free;
  220.   end;
  221. end;
  222.  
  223. procedure TMailForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  224. begin
  225.   if not SendInfoPanel.Enabled then
  226.   begin
  227.     MessageDlg('Transfer in Progress.  Click Cancel button first.',
  228.                mtError,[mbOk],0);
  229.     CanClose:=false;
  230.   end
  231.   else
  232.     CanClose:=true;
  233. end;
  234.  
  235. end.
  236.